package com.cyj.dream.core.util.regex;

import cn.hutool.core.lang.Console;
import cn.hutool.core.lang.Validator;

/**
 * @Description: 字段验证器 验证给定字符串是否满足指定条件，一般用在表单字段验证里。
 * @BelongsProject: DreamChardonnay
 * @BelongsPackage: com.cyj.dream.core.util.regex
 * @Author: ChenYongJia
 * @CreateTime: 2021-09-26 13:22
 * @Email: chen87647213@163.com
 * @Version: 1.0
 */
public class ValidatorUtils {

    /**
     * 判断字符串是否是邮箱
     *
     * @param str
     * @return
     */
    public static boolean isEmail(String str) {
        return Validator.isEmail(str);
    }

    /**
     * 验证是否为手机号码（中国）
     *
     * @param str
     * @return
     */
    public static boolean isMobile(String str) {
        return Validator.isMobile(str);
    }

    /**
     * 判断字符串是否是中国车牌照
     *
     * @param str
     * @return
     */
    public static boolean isPlateNumber(String str) {
        return Validator.isPlateNumber(str);
    }

    /**
     * 判断字符串是否是url
     *
     * @param str
     * @return
     */
    public static boolean isUrl(String str) {
        return Validator.isUrl(str);
    }

    /**
     * 判断字符串是否是 ipv4
     *
     * @param str
     * @return
     */
    public static boolean isIpv4(String str) {
        return Validator.isIpv4(str);
    }

    /**
     * 判断字符串是否是 ipv6
     *
     * @param str
     * @return
     */
    public static boolean isIpv6(String str) {
        return Validator.isIpv6(str);
    }

    /**
     * 判断字符串是否是生日（只支持以下几种格式： yyyyMMdd yyyy-MM-dd yyyy/MM/dd yyyy.MM.dd yyyy年MM月dd日）
     *
     * @param str
     * @return
     */
    public static boolean isBirthday(String str) {
        return Validator.isBirthday(str);
    }

    /**
     * 验证是否为身份证号码（支持18位、15位和港澳台的10位）
     *
     * @param str
     * @return
     */
    public static boolean isCitizenId(String str) {
        return Validator.isCitizenId(str);
    }

    /**
     * 检查给定的数字是否在指定范围内
     *
     * @param value
     * @param min
     * @param max
     * @return
     */
    public static boolean isBetween(Number value, Number min, Number max) {
        return Validator.isBetween(value, min, max);
    }

    /**
     * 验证是否为邮政编码（中国）
     *
     * @param str
     * @return
     */
    public static boolean isZipCode(String str) {
        return Validator.isZipCode(str);
    }

    /**
     * 是否是有效的统一社会信用代码
     *
     * @param str
     * @return
     */
    public static boolean isCreditCode(String str) {
        return Validator.isCreditCode(str);
    }

    /**
     * 校验用户名是否合法（正则表达式允许：中文汉字，英文，数字随意组合）
     *
     * @param str
     * @return
     */
    public static boolean isUserName(String str) {
        return Validator.isMatchRegex("[a-z0-9A-Z\u4e00-\u9fa5]*", str);
    }

    /**
     * 模拟调用 hutool 封装的 Validator 工具类且含带自行封装的验证器
     *
     * @param args
     */
    public static void main(String[] args) {
        Console.log(ValidatorUtils.isEmail("chen86764713@163.com"));
        Console.log(ValidatorUtils.isMobile("16621307405"));
        Console.log(ValidatorUtils.isPlateNumber("豫CP1889"));
        Console.log(ValidatorUtils.isUrl("http://www.yongjiachen.top/jccrm"));
        Console.log(ValidatorUtils.isIpv4("http://www.yongjiachen.top/jccrm"));
        Console.log(ValidatorUtils.isIpv6("http://www.yongjiachen.top/jccrm"));
        Console.log(ValidatorUtils.isBirthday("19980102"));
        Console.log(ValidatorUtils.isCitizenId("410305199801022513"));
        Console.log(ValidatorUtils.isUserName("5555陈w"));
    }

}
